package io;

import java.io.*;
import java.util.Scanner;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/4/20 0:45
 * 查找指定目录下的文件是否包含关键词 word
 */
public class Demo1 {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 1. 输入要删除文件的根目录
        System.out.println("请输入要删除文件的根目录: ");
        File rootDir = new File(scan.next());
        // 2. 判断是否为目录
        if (!rootDir.isDirectory()) {
            System.out.println("输入文件路径有误!");
            return;
        }
        // 3. 输入要删除的文件名
        System.out.println("请输入要查找的关键词: ");
        String word = scan.next();
        // 4. 扫描路径并尝试查找
        scanDir(rootDir, word);
    }

    private static void scanDir(File rootDir, String word) {
        File[] files = rootDir.listFiles();
        if (files == null) {
            return;
        }
        // 扫描
        // 目录中有内容就遍历目录中的每个元素
        for (File f : files) {
            System.out.println("当前搜索到: " + f.getAbsolutePath());
            if (f.isFile()) {
                // 如果是普通文件
                // 读取文件看是否包含关键词
                String content = readFile(f);
                if (content.contains(word)) {
                    System.out.println(f.getAbsolutePath() + "包含要查找的关键字" + word + "~~~");
                }
            } else if (f.isDirectory()) {
                // 如果是目录, 则递归操作
                scanDir(f, word);
            } else {
                // 既不是普通文件也不是目录
                continue;
            }
        }
    }

    // 读取文件, 并以字符串形式返回
    private static String readFile(File f) {
        StringBuilder res = new StringBuilder();
        // 一个一个字符读取
        try (Reader reader = new FileReader(f)) {
            while (true) {
                int c = reader.read();
                if (c == -1) {
                    break;
                }
                res.append((char) c);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return res.toString();
    }
}
